home *** CD-ROM | disk | FTP | other *** search
- // simple.c - simple chunk allocator
-
- #include <stdlib.h>
-
- class Simple
- {
- public:
- Simple *Next;
- int SomeData;
- void *operator new(size_t);
- void operator delete(void *, size_t);
- private:
- enum {PERCHUNK = 128};
- static Simple *FreeList;
- };
-
- void *Simple::operator new(size_t Size)
- {
- Simple *Free = FreeList;
- if(Free)
- FreeList = FreeList->Next;
- else
- {
- Free = (Simple *)new char[PERCHUNK*sizeof(Simple)];
- FreeList = Free;
- for(int i = 1; i < PERCHUNK; ++i)
- {
- Free->Next = Free + 1;
- ++Free;
- }
- Free->Next = 0; // NULL terminator
- Free = FreeList;
- }
- return Free;
- }
-
- void Simple::operator delete(void *Pointer, size_t)
- {
- Simple *This = (Simple *)Pointer;
- This->Next = FreeList;
- FreeList = This;
- }
-